package com.bdqn.spark.chapter05.kv

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark19_RDD_Operator_Transform {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf()
      .setMaster("local[*]")
      .setAppName("operator-groupbykey")
    val sc = new SparkContext(sparkConf)

    // 算子 - (Key - Value类型)
    val rdd = sc.makeRDD(List(
      ("a", 1), ("a", 2), ("a", 3), ("b", 4)
    ))

    // groupBy
    // 1,2,3,4
    // (0,List(2,4))
    // (1,List(1,3))

    //("a", 1), ("a", 2), ("a", 3), ("b", 4)
    // ("a",List(1,2,3)) ("b", 4)
    //val resultRDD: RDD[(String, Iterable[Int])] = rdd.groupByKey()
   // resultRDD.collect().foreach(println)

    val resultRDD: RDD[(String, Iterable[(String, Int)])] = rdd.groupBy(_._1)
    resultRDD.collect().foreach(println)

    // groupBy 和 groupByKey 的区别？
    // groupBy 按照指定的key分区，聚合元素本身
    // groupByKey 按照可以分区，聚合的是kv类型的 value 的值

    sc.stop()
  }
}
